package com.lqq.chapter07;

import java.util.concurrent.CountDownLatch;

/**
 * @Author lqq677
 * @Date 2021/8/11 18:51
 * @Description 6个同学陆续离开教室后，班长才锁门
 *
 *  CountDownLatch:
 *  一种同步辅助，允许一个或多个线程等待，直到在其他线程中执行的一组操作完成。CountDownLatch使用给定的计数进行初始化。
 *  由于调用了countDown方法， await方法会阻塞直到当前计数达到 0 ，然后释放所有等待线程，并且任何后续的await调用都会立即返回。
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {

        //创建CountDownLatch对象，设置初始值
        CountDownLatch countDownLatch = new CountDownLatch(6);

        //6个同学陆续离开教室之后
        for (int i = 1; i <= 6; i++) {
            new Thread(() ->{
                System.out.println(Thread.currentThread().getName()+" 号同学离开教室");
                //计数器 -1
                countDownLatch.countDown();
                    }, String.valueOf(i)).start();
        }

        //调用的线程阻塞到await()直至计数器值为0
        countDownLatch.await();

        System.out.println(Thread.currentThread().getName()+" 班长锁门");

    }
}
